-- 图片二值化 (图片 取颜色转文字)。这个api是【收费】
-- https://helpdoc.touchsprite.com/dev_docs/19/4.html

-- -- 2012年中旬，触动apk 不能运行[Lua源码]，所有用户运行脚本，必须是vip了
---- 这个可以用了，但是需要 [插件] require("tsimg")

local RxOcrImgSo = {}

function RxOcrImgSo:ocr(x,y,x1,y1, RxWhiteList, RxValue, isDel)
  RxLog('RxOcrImgSo:ocr RxTsImg='..tostring(RxTsImg))
  if not RxTsImg then
    RxLog('RxOcrImgSo:ocr RxTsImg = nil 1234567890123456789 RxTsImg='..tostring(RxTsImg))
  end
  mSleep(1)
  local ct = os.time() --以时间戳命名进行截图
  local ctPicPath = UtilImageNamePath('imgso', 'imgso')
  local ctPicDealPath = UtilImageNamePath('imgso_del', 'imgso')
  -- local w = x1 - x
  -- local h = y1 - y
  local ctImgWidth = x1 - x
  local ctImgHeight = y1 - y
  RxLog('111 识别的截图保存==='..ctPicPath)

  local ocrOpt = 10
  -- RxValue = RxValue or sysInit.dh.ocrValue.donejiangli
  -- RxWhiteList = RxWhiteList or sysInit.dh.ocrWhite.oonum
  if isDel == nil then
    isDel = 1
  end
  RxLog('RxValue='..tostring(RxValue))

  local ocrRes = ''

  snapshot(ctPicPath, x, y, x1, y1) -- 使用相对路径
  mSleep(10)
  local newImage,msg = RxTsImg.loadFile(ctPicPath) -- 绝对路径
  mSleep(1)
  if RxTsImg.is(newImage) then
    RxLog('222 加载截图的地址=='..ctPicPath)
    -- https://helpdoc.touchsprite.com/dev_docs/19/4.html
    --将图片对象进行二值化
    --图片中 0xFF27FF - 0x012815 区间内颜色值二值化后变为白色，不在区间内的颜色值都转换为黑色，可以写入多个 table

    -- binaMat binaMat	usedata/nil	二值化后的图片对象
    -- msg	nil/string	成功返回空，失败返回失败原因
    mSleep(1)
    local binaMat,msg = RxTsImg.binaryzation(newImage, RxValue)
    if RxTsImg.is(binaMat) then
      RxLog('333 加载 黑白处理的 图片 处理成功了')
        --将图片对象转换成图片保存在 res 文件夹下
        local boo,msg = RxTsImg.saveToPngFile(binaMat,ctPicDealPath)
        mSleep(1)
        RxLog(boo and "保存成功" or "保存失败 : " .. msg)
        if boo then
          RxLog('444 加载 黑白处理的 图片 进行识别')
          mSleep(100)
          ocrRes = ocrText(0,0,ctImgWidth - 1,ctImgHeight - 1,ocrOpt,{whitelist = RxWhiteList, flag = false, imagepath = ctPicDealPath})
          mSleep(1)
          RxLog('555 识别图片的结果=' .. tostring(ocrRes))
        end
        if isDel == 1 then
          -- delFile(ctPicDealPath)
        end
    else
      RxLog('666 截图保存失败了=' .. ctPicPath)
    end
  end
  if isDel == 1 then
    delFile(ctPicPath)
  end
  mSleep(1)
  return ocrRes
end

return RxOcrImgSo